WPFで推奨されているデザインパターンで、Model - View - ViewModel の略。
外観( View )と、外観に関連づくデータモデル( ViewModel )を分離することで、堅牢で透過性の高いアプリケーションとすることを目論んでいる。
MVVMは、Webアプリで主に用いられるMVC( Model - View - Controler )から派生したパターンで、類似点も多い。
View が外観を、Model が外観に直接関連しないデータを取り扱うという点は共通である。

View はXAMLとコードビハインド(XAML.CS)から成り、外観を司る。
ViewModel は View とは独立しており、ViewModel のインスタンスが View の
DataContext として関連づけられる。
これにより ViewModel のプロパティ(CLIプロパティ)と View の依存関係プロパティとが関連づけられ、
ViewModel の変更が View に伝播する。
この View と関連づけられた ViewModel のプロパティを「
変更通知プロパティ」と呼び、
View と ViewModel とのプロパティの関連づけを「
データバインディング」と呼ぶ。
逆に View に対するユーザの操作(イベント)は ViewModel の「
コマンド」に関連づけられ、ユーザ操作が ViewModel に伝播する。
(コマンドバインディング)
Model ( ViewModel ではない)は外観によらないデータおよび業務ロジックを指し、ViewModel に組み込まれることで外観に関連づけられる。
Visual Studioでウィンドウやユーザーコントロールを作成した際、対応するXAMLとコードビハインドは対で作成されるが、
ViewModel はいかなる場合も自動では作成されない(MVVMに準拠した構成とならない)。
このため、コードビハインドが ViewModel だと誤解されることも多いが誤りである。ViewModel はあくまで手動で作成する必要がある。
変更通知プロパティやコマンドを含めた ViewModel の実装を自力で行うと記述が非常に煩雑となるが、
MVVM Toolkit等のライブラリを活用することでコードの記述を大幅に削減できる。
なお、MVVMパターンはコードビハインドの記述を最小限に留めることが推奨されている。
DataContext やバインディングの指定はXAMLで行うことが可能で、ユーザアクションへの対応(イベント処理)もコマンドに委譲できる。
この場合、コードビハインドにはコンストラクタしか記述されない。